package com.jacob.androidstudy.javanote;

/**
 * 线程和进程的区别：
 * 1.进程是可以独立执行的程序，线程是进程中的工作流。
 * 2.进程包含1个或多个线程。
 * 
 * 线程的构成3要素：
 * 1.CPU资源，决定了线程何时做。此要素由OS控制。
 * 2.代码，决定了线程做什么。此要素是可以在多个线程中共享的。
 * 3.数据，决定了线程操作的对象。此要素是可以在多个线程中共享的。
 * 
 * 四种多线程编程的模式：
 * 1.线程间不共享代码和数据。
 * 2.线程间共享代码，不共享数据。
 * 3.线程间不共享代码，但共享数据。
 * 4.线程间既共享代码，也共享数据。
 * 
 * 线程的状态：
 * 1.New：新生状态。线程进入这个状态后，什么也不做。用new操作符创建一个线程对象后，就是这种状态。
 * 2.Runnable：等待执行状态。线程进入这个状态后，什么也不做。执行了线程对象的start()方法后，就是这种状态。此时只要线程得到时间片，就会进入Running状态，运行run()方法中的代码。
 * 3.Running：执行状态。线程进入这个状态后，就执行代码。直到时间片用完（进入Runnable），或代码执行完（进入Dead）。
 * 4.Dead：死亡状态。线程进入这个状态后，什么也不做。线程执行完代码后，进入这个状态。
 * 5.Block：阻塞状态。线程进入这个状态后，先释放时间片，然后什么也不做。执行Thread.sleep(long millis)，会使当前进程进入此状态。阻塞时间结束后，进程重新进入Runnable。
 * 6.Lock：锁池。进程进入这个状态后，先释放时间片，然后等待对象锁。进程在执行synchronized代码时，若得不到对象锁，会进入该对象的锁池，直到得到对象锁后，进程进入Runnable。
 * 6.Wait：等待池。线程进入这个状态后，先释放时间片和对象锁，然后什么也不做。进程在执行了xxx.wait()方法后，会进入xxx的锁池等待（同时释放xxx的锁），直到等待时间过完或xxx.notify()方法被执行，进程进入该对象的锁池。
 * 
 */
public class $17_多线程 {


}

/**
 * Java实现线程的方法一：
 * 写一个类，继承java.lang.Thread类。
 * 
 */
class ThreadA extends Thread {

	public ThreadA() {
		super();
	}

	/**
	 * 声明构造方法。
	 */
	public ThreadA(String name) {
		super(name);
	}

	/**
	 * 覆盖run()方法
	 */
	@Override
	public void run() {
		
//		这里写线程执行的代码
		
	}
	
	public static void main(String[] args) {
		/**
		 * 要执行线程，new一个对象，然后调用对象的start()方法即可。
		 * 几个对象会并发的运行run()方法中的代码。
		 */
		new ThreadA("线程01").start();
		new ThreadA("线程02").start();
		
		/**
		 * 若直接调用了run()方法，则会顺序执行run()方法中的代码。
		 * 这就不是多线程了。
		 */
		new ThreadA().run();
		new ThreadA().run();
		
		/**
		 * 
		 */
		
		
	}
}


/**
 * Java实现线程的方法二：
 * 写一个类，实现java.lang.Runnable接口。
 * 
 */
class ThreadB implements Runnable {

	/**
	 * 覆盖run()方法
	 */
	@Override
	public void run() {
		
//		这里写线程执行的代码
		
	}
	
	public static void main(String[] args) {
		/**
		 * 要执行线程，new一个对象。然后用该对象做参数，生成一个java.lang.Thread对象。然后调用Thread对象的start()方法即可。
		 * 几个对象会并发的运行run()方法中的代码。
		 */
		new Thread(new ThreadB(),"线程01").start();
		new Thread(new ThreadB(),"线程02").start();
		
		/**
		 * 若直接调用了run()方法，则会顺序执行run()方法中的代码。
		 * 这就不是多线程了。
		 */
		new Thread(new ThreadB()).run();
		new ThreadB().run();
		
	}
}

class AboutThread {
	
}